package com.xy.tianyu

import android.os.Bundle
import android.text.TextUtils
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.Fragment

/**
 * Fragment预加载问题的解决方案：
 * 1.可以懒加载的Fragment
 * 2.切换到其他页面时停止加载数据（可选）
 * Created by yuandl on 2016-11-17.
 * blog ：http://blog.csdn.net/linglongxin24/article/details/53205878
 */
abstract class LazyLoadBaseFragment : Fragment() {

    private var isLoad = false
    //是否执行了hiddenChanged方法
    private var isHiddenChanged = false
    protected val TAG = "LazyLoadFragment"

    /**
     * 获取设置的布局
     *
     * @return
     */
    protected var contentView: View? = null
        private set

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        if (contentView == null){
            contentView = inflater.inflate(setContentView(), container, false)
        }
        val parent  = contentView?.parent
        if (parent!=null){
              (parent as ViewGroup).removeView(contentView)
        }
        return contentView
    }

    override fun onResume() {
        super.onResume()
        if (!isLoad){
            isLoad = true
            lazyLoad()
        }
    }

    override fun onPause() {
        super.onPause()
        stopLoad()
    }

    /**
     * 设置Fragment要显示的布局
     *
     * @return 布局的layoutId
     */
    protected abstract fun setContentView(): Int

    /**
     * 找出对应的控件
     *
     * @param id
     * @param <T>
     * @return
    </T> */
    protected fun <T : View?> findViewById(id: Int): T {
        return contentView!!.findViewById<View>(id) as T
    }

    /**
     * 当视图初始化并且对用户可见的时候去真正的加载数据
     */
    protected abstract fun lazyLoad()

    /**
     * 当视图已经对用户不可见并且加载过数据，如果需要在切换到其他页面时停止加载数据，可以调用此方法
     */
    protected abstract fun stopLoad()

 /*   override fun onHiddenChanged(hidden: Boolean) {
        super.onHiddenChanged(hidden)
        if (!hidden && !isHiddenChanged){
            isLoad = true
            isHiddenChanged = true
            lazyLoad()
        }
    }*/
}